#博客登录页面自动化测试
from selenium.webdriver.support import expected_conditions as EC
from time import sleep
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from BologAutoTest.Common.Utils import BlogDriver


class BlogLogin:
    #通过url访问指定页面
    url=""
    driver=""
    def __init__(self):
        #个人博客用户登入界面网址
        self.url="http://8.137.19.140:9090/blog_login.html"
        #调用配置的浏览器Driver,再通过driver.get访问个人博客用户登录页面
        self.driver = BlogDriver.driver
        #打开指定的url
        self.driver.get(self.url)

        #成功登录
    def LoginSuccess(self):
        # 定位到用户名输入框，输入正确的账号
        self.driver.find_element(By.CSS_SELECTOR,"#username").send_keys("zhangsan")
        sleep(1)
        # 定位到用户密码输入框，输入正确的密码
        self.driver.find_element(By.CSS_SELECTOR,"#password").send_keys("123456")
        sleep(1)
        # 定位到登录按钮并且点击
        self.driver.find_element(By.CSS_SELECTOR,"#submit").click()
        sleep(1)
        #判断是否登录成功,成功即可定位到以下元素，并且截图查看
        self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.left > div > img").click()
        #添加屏幕截图--1
        BlogDriver.getScreeShot()
        sleep(1)

    #未成功登录
    def LoginFail(self):
        #重新进入个人博客用户登入界面，不会出现关键词拼接，如果出现就用clear()清理即可
        self.driver.get(self.url)
        sleep(1)

        #什么都不输入直接登录
        self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
        sleep(1)
        # 最多等待2秒，直到页面弹出 alert对话框，然后获取提示文本并断言其内容为“用户不存在”。
        wait = WebDriverWait(self.driver, 2)
        wait.until(EC.alert_is_present())
        # self.switchT.alert是获取alert，返回一个alert对象
        alert = self.driver.switch_to.alert
        print(alert.text)
        assert alert.text == "账号或密码不能为空"
        # 关闭弹窗
        alert.accept()
        sleep(1)


        # 定位到用户名输入框，输入错误的账号
        self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("as")
        sleep(1)
        # 定位到用户密码输入框，输入正确的密码
        self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")
        sleep(1)
        self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
        sleep(1)
        #最多等待2秒，直到页面弹出 alert对话框，然后获取提示文本并断言其内容为“用户不存在”。
        wait = WebDriverWait(self.driver, 2)
        wait.until(EC.alert_is_present())
        #self.switchT.alert是获取alert，返回一个alert对象
        alert = self.driver.switch_to.alert
        print(alert.text)
        assert alert.text == "用户不存在"
        # 关闭弹窗
        alert.accept()
        sleep(1)

        # 重新进入个人博客用户登入界面
        self.driver.get(self.url)
        # 定位到用户名输入框，输入正确的账号
        self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("zhangsan")
        sleep(1)
        # 定位到用户密码输入框，输入错误的密码
        self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("666")
        sleep(1)
        self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
        sleep(1)

        # 最多等待2秒，直到页面弹出 alert对话框，然后获取提示文本并断言其内容为“密码错误”。
        wait = WebDriverWait(self.driver, 2)
        wait.until(EC.alert_is_present())
        # self.switchT.alert是获取alert，返回一个alert对象
        alert = self.driver.switch_to.alert
        print(alert.text)
        assert alert.text == "密码错误"
        #关闭弹窗
        alert.accept()
        sleep(2)

        # 尝试在未登录的情况下点击主页并截图
        self.driver.find_element(By.CSS_SELECTOR, "body > div.nav > a:nth-child(4)").click()
        sleep(1)
        # 截图--1
        BlogDriver.getScreeShot()
        # 返回上一页
        self.driver.back()

        # 尝试在未登录的情况下点击写博客并截图
        self.driver.find_element(By.CSS_SELECTOR, "body > div.nav > a:nth-child(5)").click()
        sleep(3)
        # 截图--2
        BlogDriver.getScreeShot()

        # 这里直接get回到登录页
        self.driver.get("http://8.137.19.140:9090/blog_login.html")
        sleep(3)

    #尝试在未注销的情况下，点击登录页的主页或者写博客按钮
    def LoginBug(self):
        #登录
        # 登录里面存在一张截图--1
        BlogLogin.LoginSuccess(self)
        #这里直接get到登录页
        self.driver.get("http://8.137.19.140:9090/blog_login.html")
        # 点击主页并截图
        self.driver.find_element(By.CSS_SELECTOR, "body > div.nav > a:nth-child(4)").click()
        sleep(1)
        # 截图--2
        BlogDriver.getScreeShot()
        # 返回上一页
        self.driver.back()

        # 点击写博客并截图
        self.driver.find_element(By.CSS_SELECTOR, "body > div.nav > a:nth-child(5)").click()
        sleep(3)
        # 截图--3
        BlogDriver.getScreeShot()